﻿Imports System.Data
Imports System.Data.OleDb

Public Class Ventas

    Public conexion As New OleDb.OleDbConnection("Provider=Microsoft.ACE.Oledb.12.0; Data Source=nuevozoo.accdb")

    'para clientes
    Public adaptador As New OleDbDataAdapter("select * from productos", conexion)
    Public miDataset As New DataSet

    'para operaciones
    Public adaptador2 As New OleDbDataAdapter("select * from tipo_operaciones", conexion)
    Public miDataset2 As New DataSet

    'para vacunas
    Public adaptador3 As New OleDbDataAdapter("select * from tipo_vacunas", conexion)
    Public miDataset3 As New DataSet

    'para enfermedades
    Public adaptador4 As New OleDbDataAdapter("select * from tipo_enfermedades", conexion)
    Public miDataset4 As New DataSet


    'para animal_vacunas
    Public adaptador5 As New OleDbDataAdapter("select * from animal_vacunas", conexion)
    Public miDataset5 As New DataSet

    Private cuenta As Double = 0
    Private cod_animal As Integer = BusquedaClientesAnimales.animal

    Private Sub Ventas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        lab_Usuario.Text = Bienvenida.usuario

        'CLIENTES---------------------------------------------------------------------

        'rellenar datagriview
        adaptador.Fill(miDataset, "productos")
        DataGridViewProductos.DataSource = miDataset
        DataGridViewProductos.DataMember = "productos"

        'modificar las cabeceras
        DataGridViewProductos.Columns("cod_producto").Visible = False
        DataGridViewProductos.Columns("nombre").Visible = True
        DataGridViewProductos.Columns("descripcion").Visible = True
        DataGridViewProductos.Columns("stock").Visible = True
        DataGridViewProductos.Columns("cod_distribuidor").Visible = False


        'Si se entra con una consulta, se cargará el datagridview y se tendrá posibilidad de añadir a la 
        'compra una operacion o una vacuna. Además se modificará el ancho dependiendo del caso anterior
        If BusquedaClientesAnimales.animal <> 0 Then
            adaptador2.Fill(miDataset2, "tipo_operaciones")
            adaptador3.Fill(miDataset3, "tipo_vacunas")

            'Operaciones

            'rellenar datagriview
            adaptador2.Fill(miDataset2, "tipo_operaciones")
            DataGridViewOperaciones.DataSource = miDataset2
            DataGridViewOperaciones.DataMember = "tipo_operaciones"

            'modificar las cabeceras
            DataGridViewOperaciones.Columns("cod_operacion").Visible = False
            DataGridViewOperaciones.Columns("descripcion").Visible = False

            'Vacunas

            'rellenar datagriview
            adaptador3.Fill(miDataset3, "tipo_vacunas")
            DataGridViewVacunas.DataSource = miDataset3
            DataGridViewVacunas.DataMember = "tipo_vacunas"

            'modificar las cabeceras
            DataGridViewVacunas.Columns("cod_vacuna").Visible = False
            DataGridViewVacunas.Columns("descripcion").Visible = False

            'Enfermedades

            'rellenar datagriview
            adaptador4.Fill(miDataset4, "tipo_enfermedades")
            DataGridViewEnfermedades.DataSource = miDataset4
            DataGridViewEnfermedades.DataMember = "tipo_enfermedades"

            'modificar las cabeceras
            DataGridViewEnfermedades.Columns("cod_enfermedad").Visible = False
            DataGridViewEnfermedades.Columns("descripcion").Visible = False
            TabControlVentas.TabPages.Remove(TabPage3)
            TabControlConsulta.TabPages.Remove(TabPage5)
        Else
            lab_ProductosC.Visible = False
            TabControlVentas.TabPages.Remove(TabPage4)

        End If

    End Sub

    Private Sub b_Añadir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_Añadir.Click

        'Recojo el valor seleccionado del datagridview y lo vuelco en el list box actualizando 
        'el valor del precio total
        'También actualizo el stock del producto


        Try
            For i As Integer = 1 To NumericUpDown.Value
                If DataGridViewProductos.CurrentRow.Cells("stock").Value > 0 Then
                    Dim nombre As String = DataGridViewProductos.CurrentRow.Cells("nombre").Value
                    Dim precio As Integer = DataGridViewProductos.CurrentRow.Cells("precio").Value
                    DataGridViewProductos.CurrentRow.Cells("stock").Value = DataGridViewProductos.CurrentRow.Cells("stock").Value - 1
                    list_Articulos.Items.Add(nombre)
                    list_Precio.Items.Add(precio)
                    lab_Total.Text = CUInt(lab_Total.Text) + precio
                Else
                    Throw New ApplicationException("No quedan existencias de ese artículo")

                End If
            Next
        Catch ex1 As NullReferenceException
            MsgBox("No ha seleccionado ningún elemento", , "Advertencia")
            Bienvenida.log.WriteLine("Fecha: " & Date.Now & "Pantalla: " & Me.Name & " Error: " & ex1.Message)
            Bienvenida.log.Flush()
        Catch ex2 As ApplicationException
            MsgBox(ex2.Message)
            Bienvenida.log.WriteLine("Fecha: " & Date.Now & "Pantalla: " & Me.Name & " Error: " & ex2.Message)
            Bienvenida.log.Flush()
        End Try


    End Sub

    Private Sub text_NombreArticulo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles text_NombreArticulo.TextChanged


        Dim comando As New OleDbCommand("SELECT * from productos where nombre like '%" & text_NombreArticulo.Text & "%'", conexion)
        adaptador.SelectCommand = comando
        miDataset.Clear()
        adaptador.Fill(miDataset, "productos")
        DataGridViewProductos.DataSource = miDataset
    End Sub

    Private Sub b_Registro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_Registro.Click
        'Elimina un registro de la compra
        Try
            Dim articulo As String
            articulo = list_Articulos.SelectedItem.ToString
            'recorremos el datagridview para volver a aumentar el stock del producto cancelado
            For Each elemento As DataGridViewRow In DataGridViewProductos.Rows
                If elemento.Cells("nombre").Value = articulo Then
                    elemento.Cells("stock").Value = elemento.Cells("stock").Value + 1
                    Exit For
                End If
            Next


            list_Precio.Items.RemoveAt(list_Articulos.SelectedIndex)
            list_Articulos.Items.Remove(list_Articulos.SelectedItem)

            For Each elemento In list_Precio.Items 'calcula el total de la cuenta hasta el momento
                cuenta = cuenta + Val(elemento.ToString)
            Next
            lab_Total.Text = cuenta 'saca en el textbox el total de la cuenta cada vez que se modifica
            cuenta = 0 'vuelve a inicar la cuenta a cero para que no se incremente de más

        Catch ex As Exception
            MsgBox("No ha seleccionado ningún elemento", , "Advertencia")
            Bienvenida.log.WriteLine("Fecha: " & Date.Now & "Pantalla: " & Me.Name & " Error: " & ex.Message)
            Bienvenida.log.Flush()
        End Try

    End Sub

    Private Sub b_Limpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_Limpiar.Click
        limpiar()
    End Sub

    Private Sub b_Volver_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        GestionGeneral.Show()
        Me.Close()
    End Sub

    Private Sub b_Comprar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_Comprar.Click
        'Recorro el datagridview y actualizo cada campo de stock
        For Each elemento As DataGridViewRow In DataGridViewProductos.Rows
            conexion.Open()
            Dim myCommand As OleDbCommand
            myCommand = New OleDbCommand("update productos set stock = " & elemento.Cells("stock").Value & " where cod_producto=" & elemento.Cells("cod_producto").Value, conexion)
            myCommand.ExecuteNonQuery()
            conexion.Close()
        Next

        miDataset.Clear()
        DataGridViewProductos.DataSource = miDataset
        adaptador.Fill(miDataset, "productos")
        DataGridViewProductos.DataSource = miDataset
        DataGridViewProductos.DataMember = "productos"

        limpiar()

    End Sub

    Private Sub limpiar()
        'Limpia ambos list box y pone el total a 0
        list_Articulos.Items.Clear()
        list_Precio.Items.Clear()
        'Vacio el dataset para asignarselo al datagridview, que lo dejará vacio y listo para cargar de nuevo 
        'los datos de la tabla
        miDataset.Clear()
        DataGridViewProductos.DataSource = miDataset
        adaptador.Fill(miDataset, "productos")
        DataGridViewProductos.DataSource = miDataset
        DataGridViewProductos.DataMember = "productos"

        'modificar las cabeceras
        DataGridViewProductos.Columns("cod_producto").Visible = False
        DataGridViewProductos.Columns("nombre").Visible = True
        DataGridViewProductos.Columns("descripcion").Visible = True
        DataGridViewProductos.Columns("stock").Visible = True
        DataGridViewProductos.Columns("cod_distribuidor").Visible = False
        lab_Total.Text = 0
    End Sub



    Private Sub DataGridViewVacunas_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridViewVacunas.CellContentClick      
        Dim encontrado As Boolean = False
        For i As Integer = 0 To list_Tratamientos.Items.Count - 1

            If DataGridViewVacunas.CurrentRow.Cells("nombre").Value = list_Tratamientos.Items.Item(i) Then
                encontrado = True
            End If
        Next

        If encontrado = False Then
            Dim nombre As String = DataGridViewVacunas.CurrentRow.Cells("nombre").Value
            Dim precio As Integer = DataGridViewVacunas.CurrentRow.Cells("precio").Value
            list_Articulos.Items.Add(nombre)
            list_Tratamientos.Items.Add(nombre)
            list_Control.Items.Add(1)
            list_Cod.Items.Add(DataGridViewVacunas.CurrentRow.Cells("cod_vacuna").Value)
            list_Precio.Items.Add(precio)
            lab_Total.Text = CUInt(lab_Total.Text) + precio
        End If


    End Sub

    Private Sub DataGridViewOperaciones_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridViewOperaciones.CellContentClick
        Dim encontrado As Boolean = False
        For i As Integer = 0 To list_Tratamientos.Items.Count - 1

            If DataGridViewOperaciones.CurrentRow.Cells("nombre").Value = list_Tratamientos.Items.Item(i) Then
                encontrado = True
            End If
        Next

        If encontrado = False Then
            Dim nombre As String = DataGridViewOperaciones.CurrentRow.Cells("nombre").Value
            Dim precio As Integer = DataGridViewOperaciones.CurrentRow.Cells("precio").Value
            list_Tratamientos.Items.Add(nombre)
            list_Articulos.Items.Add(nombre)
            list_Control.Items.Add(2)
            list_Cod.Items.Add(DataGridViewOperaciones.CurrentRow.Cells("cod_operacion").Value)
            list_Precio.Items.Add(precio)
            lab_Total.Text = CUInt(lab_Total.Text) + precio
        End If

        
    End Sub

    Private Sub link_Cerrar_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs)
        Bienvenida.usuario = ""
        Bienvenida.Show()
        Me.Close()
    End Sub


    Private Sub DataGridViewEnfermedades_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridViewEnfermedades.CellContentClick
       

        Dim encontrado As Boolean = False
        For i As Integer = 0 To list_Tratamientos.Items.Count - 1

            If DataGridViewEnfermedades.CurrentRow.Cells("nombre").Value = list_Tratamientos.Items.Item(i) Then
                encontrado = True
            End If
        Next

        If encontrado = False Then
            Dim nombre As String = DataGridViewEnfermedades.CurrentRow.Cells("nombre").Value
            list_Tratamientos.Items.Add(nombre)
            list_Control.Items.Add(3)
            list_Cod.Items.Add(DataGridViewEnfermedades.CurrentRow.Cells("cod_enfermedad").Value)
        End If
    End Sub

 
    Private Sub b_RegistroC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_RegistroC.Click
        Try
            If (list_Control.Items.Item(list_Tratamientos.SelectedIndex)) <> 3 Then
              
                list_Precio.Items.RemoveAt(list_Tratamientos.SelectedIndex)
                list_Articulos.Items.Remove(list_Tratamientos.SelectedItem)

                For Each elemento In list_Precio.Items 'calcula el total de la cuenta hasta el momento
                    cuenta = cuenta + Val(elemento.ToString)
                Next
                lab_Total.Text = cuenta 'saca en el textbox el total de la cuenta cada vez que se modifica
                cuenta = 0 'vuelve a inicar la cuenta a cero para que no se incremente de más

            End If
            list_Cod.Items.RemoveAt(list_Tratamientos.SelectedIndex)
            list_Control.Items.RemoveAt(list_Tratamientos.SelectedIndex)
            list_Tratamientos.Items.Remove(list_Tratamientos.SelectedItem)

        Catch ex As Exception
            MsgBox("No ha seleccionado ningún elemento", , "Advertencia")
            Bienvenida.log.WriteLine("Fecha: " & Date.Now & "Pantalla: " & Me.Name & " Error: " & ex.Message)
            Bienvenida.log.Flush()
        End Try
    End Sub

    Private Sub b_LimpiarC_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_LimpiarC.Click
        
        'Limpia ambos list box y pone el total a 0
        list_Articulos.Items.Clear()
        list_Precio.Items.Clear()
        list_Tratamientos.Items.Clear()
        list_Cod.Items.Clear()
        list_Control.Items.Clear()
        'Vacio el dataset para asignarselo al datagridview, que lo dejará vacio y listo para cargar de nuevo 
        'los datos de la tabla
        miDataset.Clear()
        DataGridViewProductos.DataSource = miDataset
        adaptador.Fill(miDataset, "productos")
        DataGridViewProductos.DataSource = miDataset
        DataGridViewProductos.DataMember = "productos"

        'modificar las cabeceras
        DataGridViewProductos.Columns("cod_producto").Visible = False
        DataGridViewProductos.Columns("nombre").Visible = True
        DataGridViewProductos.Columns("descripcion").Visible = True
        DataGridViewProductos.Columns("stock").Visible = True
        DataGridViewProductos.Columns("cod_distribuidor").Visible = False
        lab_Total.Text = 0
    End Sub

    Private Sub b_Guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_Guardar.Click
        Try
            conexion.Open()
            If (b_Guardar.Text <> "Completar operación") Then

                Dim res As Integer = MsgBox("Se va introducir la información sobre vacunas y operaciones.¿Desea continuar?", MsgBoxStyle.YesNo, "Aviso")
                If res = vbYes Then
                    Dim myCommand As OleDbCommand
                    For i As Integer = 0 To list_Tratamientos.Items.Count - 1

                        If list_Control.Items.Item(i) = 1 Then
                            myCommand = New OleDbCommand("INSERT INTO animal_vacunas VALUES(" & cod_animal & "," & list_Cod.Items.Item(i) & ",'" & Date.Now.Date & "' )", conexion)
                            myCommand.ExecuteNonQuery()
                        ElseIf list_Control.Items.Item(i) = 2 Then
                            myCommand = New OleDbCommand("INSERT INTO animal_operaciones VALUES(" & cod_animal & "," & list_Cod.Items.Item(i) & ",'" & Date.Now.Date & "' )", conexion)
                            myCommand.ExecuteNonQuery()
                        End If
                    Next
                    TabControlConsulta.TabPages.Add(TabPage5)
                    TabControlConsulta.TabPages.Remove(TabPage1)
                    TabControlConsulta.TabPages.Remove(TabPage2)
                    list_Cod.Items.Clear()
                    list_Control.Items.Clear()
                    list_Tratamientos.Items.Clear()
                    b_Guardar.Text = "Completar operación"
                End If

            Else

                Dim res As Integer = MsgBox("Se va completar la consulta.¿Desea continuar?", MsgBoxStyle.YesNo, "Aviso")
                If res = vbYes Then
                    Dim myCommand As OleDbCommand
                    For i As Integer = 0 To list_Tratamientos.Items.Count - 1
                        myCommand = New OleDbCommand("INSERT INTO animal_enfermedades VALUES(" & cod_animal & "," & list_Cod.Items.Item(i) & ")", conexion)
                        myCommand.ExecuteNonQuery()
                    Next

                End If
                TabControlVentas.TabPages.Add(TabPage3)
                TabControlVentas.TabPages.Remove(TabPage4)

            End If
            conexion.Close()
        Catch ex As Exception
            MsgBox("Algún dato introducido está repetido", , "Error")
            Bienvenida.log.WriteLine("Fecha: " & Date.Now & "Pantalla: " & Me.Name & " Error: " & ex.Message)
            Bienvenida.log.Flush()
        End Try
       

    End Sub

    Private Sub VolverToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VolverToolStripMenuItem.Click
        BusquedaClientesAnimales.Show()
        Me.Close()
    End Sub
End Class

